home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / tcl / xf2.3-p / xf2 / xf2.3 / src / xfsave.tcl < prev    next >
Encoding:
Text File  |  1993-11-20  |  29.3 KB  |  833 lines

  1. # Program: xf
  2. # Description: external interface to save facilities
  3. #
  4. # $Header: xfsave.tcl[2.5] Wed Mar 10 12:08:14 1993 garfield@garfield frozen $
  5.  
  6. auto_load XFSaveBind
  7. auto_load XFSaveSourceAppendix
  8.  
  9. ##########
  10. # Procedure: XFSave
  11. # Description: save current definition
  12. # Arguments: xfFileName - the output file
  13. # Returns: none
  14. # Sideeffects: none
  15. ##########
  16. proc XFSave {xfFileName} {
  17.   global xfConf
  18.   global xfMisc
  19.   global xfPath
  20.   global xfStatus
  21.  
  22.   if {$xfStatus(saving)} {
  23.     return
  24.   }
  25.   set xfStatus(saving) 1
  26.   XFMiscUpdateModuleList
  27.   # clear up the window showing stuff
  28.   XFEditSetShowWindows
  29.  
  30.   # save current file
  31.   if {[file exists $xfFileName]} {
  32.     catch "exec cp $xfFileName $xfFileName~"
  33.     catch "exec cp $xfFileName $xfPath(tmp)/lc$xfStatus(uniqueId)"
  34.   }
  35.   if {[catch "open $xfFileName w" xfOutFile]} {
  36.     XFProcError "$xfOutFile"
  37.   } {
  38.     XFSaveComment $xfOutFile file [file rootname [file tail $xfFileName]]
  39.     XFSaveSourcePrefix $xfOutFile 1
  40.  
  41.     # save all visible children of .
  42.     foreach xfCounter [lsort [winfo children .]] {
  43.       if {![string match ".xf*" $xfCounter] &&
  44.           ![string match "xf*" [winfo name $xfCounter]] &&
  45.           "[winfo class $xfCounter]" == "Toplevel"} {
  46.         XFSaveRootToplevelChild $xfOutFile $xfCounter
  47.         XFSaveSourceDestroyWindow $xfOutFile $xfCounter
  48.         XFSaveShowWindowTail $xfOutFile $xfCounter
  49.       }
  50.     }
  51.     # save all invisible children of .
  52.     foreach xfProcName [lsort [info procs ShowWindow.*]] {
  53.       XFSaveShowWindow $xfOutFile $xfProcName
  54.     }
  55.     # save .
  56.     set xfMisc(menuBarTraversalList) ""
  57.     set xfMisc(specialSaveString) ""
  58.     puts $xfOutFile "\n\n# procedure to show window ."
  59.     puts $xfOutFile "proc ShowWindow. {args} {# xf ignore me 7"
  60.     if {"[info procs StartupSrc.]" != ""} {
  61.       puts $xfOutFile "\nStartupSrc."
  62.     }
  63.     XFSaveWidget $xfOutFile .
  64.     XFSaveBind $xfOutFile .
  65.     XFSaveWidgetSpecial $xfOutFile .
  66.     XFSaveSubwindow $xfOutFile .
  67.     if {"[info procs MiddleSrc.]" != ""} {
  68.       puts $xfOutFile "\nMiddleSrc."
  69.     }
  70.     XFSavePack $xfOutFile .
  71.     XFSavePlace $xfOutFile .
  72.     XFSaveMenubarTraversal $xfOutFile
  73.     if {"$xfMisc(specialSaveString)" != ""} {
  74.       puts $xfOutFile "\n$xfMisc(specialSaveString)\n"
  75.     }
  76.     if {"[info procs EndSrc.]" != ""} {
  77.       puts $xfOutFile "\nEndSrc."
  78.     }
  79.     puts $xfOutFile "\n  if {\"\[info procs XFEdit\]\" != \"\"} {"
  80.     puts $xfOutFile "    catch \"XFMiscBindWidgetTree .\""
  81.     puts $xfOutFile "    after 2 \"catch \{XFEditSetShowWindows\}\""
  82.     puts $xfOutFile "  }"
  83.     puts $xfOutFile "}"
  84.     XFSaveShowWindowTail $xfOutFile .
  85.  
  86.     # save procedures
  87.     foreach xfProcName [lsort [info procs]] {
  88.       XFSaveProc $xfOutFile $xfProcName
  89.     }
  90.  
  91.     XFSaveSourceAppendix $xfOutFile 1
  92.     puts $xfOutFile "\n# eof"
  93.     puts $xfOutFile "#"
  94.     puts $xfOutFile ""
  95.     close $xfOutFile
  96.   }
  97.   catch "chmod u+x $xfFileName"
  98.   set xfStatus(saving) 0
  99. }
  100.  
  101. ##########
  102. # Procedure: XFSaveModules
  103. # Description: save current definition splitted in modules
  104. # Arguments: xfFileName - the output file
  105. # Returns: none
  106. # Sideeffects: none
  107. ##########
  108. proc XFSaveModules {xfFileName} {
  109.   global autoLoadList
  110.   global moduleList
  111.   global xfConf
  112.   global xfMisc
  113.   global xfPath
  114.   global xfSaveModuleList
  115.   global xfStatus
  116.  
  117.   if {$xfStatus(saving)} {
  118.     return
  119.   }
  120.   set xfStatus(saving) 1
  121.   XFMiscUpdateModuleList
  122.   # clear up the window showing stuff
  123.   XFEditSetShowWindows
  124.  
  125.   # save modules
  126.   foreach xfModFileName [lsort [array names moduleList]] {
  127.     if {"$xfModFileName" == $xfConf(programName) ||
  128.         ([llength $xfSaveModuleList] > 0 &&
  129.          [lsearch $xfSaveModuleList $xfModFileName] == -1)} {
  130.       continue
  131.     }
  132.     if {[file exists $xfModFileName]} {
  133.       catch "exec cp $xfModFileName $xfModFileName~"
  134.     }
  135.     if {[catch "open $xfModFileName w" xfOutFile]} {
  136.       XFProcError "$xfOutFile"
  137.     } {
  138.       XFSaveComment $xfOutFile module $xfModFileName
  139.       puts $xfOutFile "\n# module contents"
  140.       puts $xfOutFile "global moduleList"
  141.       puts $xfOutFile "global autoLoadList"
  142.       if {[info exists moduleList($xfModFileName)]} {
  143.         puts $xfOutFile "set moduleList($xfModFileName) \{[set moduleList($xfModFileName)]\}"
  144.       }
  145.       if {[info exists autoLoadList($xfModFileName)]} {
  146.         puts $xfOutFile "set autoLoadList($xfModFileName) \{[set autoLoadList($xfModFileName)]\}"
  147.       }
  148.  
  149.       puts $xfOutFile "\n# procedures to show toplevel windows"
  150.  
  151.       # save all visible children of . in this module
  152.       foreach xfCounter [lsort [winfo children .]] {
  153.         if {[lsearch [set moduleList($xfModFileName)] $xfCounter] >= 0} {
  154.           XFSaveRootToplevelChild $xfOutFile $xfCounter
  155.           XFSaveSourceDestroyWindow $xfOutFile $xfCounter
  156.           XFSaveShowWindowTail $xfOutFile $xfCounter
  157.         }
  158.       }
  159.       # save all invisible children of . in this module
  160.       foreach xfProcName [lsort [info procs ShowWindow.*]] {
  161.         if {[lsearch [set moduleList($xfModFileName)] \
  162.               [string range $xfProcName 10 end]] >= 0} {
  163.           XFSaveShowWindow $xfOutFile $xfProcName
  164.         }
  165.       }
  166.  
  167.       # save .
  168.       set xfMisc(menuBarTraversalList) ""
  169.       set xfMisc(specialSaveString) ""
  170.       if {[lsearch [set moduleList($xfModFileName)] .] >= 0} {
  171.         puts $xfOutFile "\n\n# procedure to show window ."
  172.         puts $xfOutFile "proc ShowWindow. {args} {# xf ignore me 7"
  173.         if {"[info procs StartupSrc.]" != ""} {
  174.           puts $xfOutFile "\nStartupSrc."
  175.         }
  176.         XFSaveWidget $xfOutFile .
  177.         XFSaveBind $xfOutFile .
  178.         XFSaveWidgetSpecial $xfOutFile .
  179.         XFSaveSubwindow $xfOutFile .
  180.         if {"[info procs MiddleSrc.]" != ""} {
  181.           puts $xfOutFile "\nMiddleSrc."
  182.         }
  183.         XFSavePack $xfOutFile .
  184.         XFSavePlace $xfOutFile .
  185.         XFSaveMenubarTraversal $xfOutFile
  186.         if {"$xfMisc(specialSaveString)" != ""} {
  187.           puts $xfOutFile "\n$xfMisc(specialSaveString)\n"
  188.         }
  189.         if {"[info procs EndSrc.]" != ""} {
  190.           puts $xfOutFile "\nEndSrc."
  191.         }
  192.         puts $xfOutFile "\n  if {\"\[info procs XFEdit\]\" != \"\"} {"
  193.         puts $xfOutFile "    catch \"XFMiscBindWidgetTree .\""
  194.         puts $xfOutFile "    after 2 \"catch \{XFEditSetShowWindows\}\""
  195.         puts $xfOutFile "  }"
  196.         puts $xfOutFile "}"
  197.         XFSaveShowWindowTail $xfOutFile .
  198.       }
  199.  
  200.       # save procedures
  201.       puts $xfOutFile "\n\n# User defined procedures"
  202.       foreach xfProcName [set moduleList($xfModFileName)] {
  203.         if {"[info procs $xfProcName]" != ""} {
  204.           if {[XFMiscIsXFSpecialElement $xfProcName]} {
  205.             continue
  206.           }
  207.           XFSaveProc $xfOutFile $xfProcName
  208.         }
  209.       }
  210.       puts $xfOutFile "\n\n# Internal procedures"
  211.       foreach xfProcName [set moduleList($xfModFileName)] {
  212.         if {"[info procs $xfProcName]" != ""} {
  213.           if {[XFMiscIsXFSpecialElement $xfProcName]} {
  214.             XFSaveProc $xfOutFile $xfProcName
  215.           }
  216.         }
  217.       }
  218.       puts $xfOutFile "\n# eof"
  219.       puts $xfOutFile "#"
  220.       puts $xfOutFile ""
  221.       close $xfOutFile
  222.     }
  223.   }
  224.  
  225.   # save main part
  226.   if {([llength $xfSaveModuleList] > 0 &&
  227.        [lsearch $xfSaveModuleList $xfFileName] == -1) ||
  228.        [llength $xfSaveModuleList] == 0} {
  229.     if {[file exists $xfFileName]} {
  230.       catch "exec cp $xfFileName $xfFileName~"
  231.       catch "exec cp $xfFileName $xfPath(tmp)/lc$xfStatus(uniqueId)"
  232.     }
  233.     if {[catch "open $xfFileName w" xfOutFile]} {
  234.       XFProcError "$xfOutFile"
  235.     } {
  236.       XFSaveComment $xfOutFile file [file rootname $xfConf(programName)]
  237.       XFSaveSourcePrefix $xfOutFile
  238.  
  239.       # save all visible children of . in this module
  240.       foreach xfCounter [lsort [winfo children .]] {
  241.         if {[XFMiscInModule $xfCounter] == 0 &&
  242.             [XFMiscIsXFElement $xfCounter] == 0 &&
  243.             "[winfo class $xfCounter]" == "Toplevel"} {
  244.           XFSaveRootToplevelChild $xfOutFile $xfCounter
  245.           XFSaveSourceDestroyWindow $xfOutFile $xfCounter
  246.           XFSaveShowWindowTail $xfOutFile $xfCounter
  247.         }
  248.       }
  249.       # save all invisible children of . in this module
  250.       foreach xfProcName [lsort [info procs ShowWindow.*]] {
  251.         if {[XFMiscInModule [string range $xfProcName 10 end]] == 0 &&
  252.             [XFMiscIsXFElement [string range $xfProcName 10 end]] == 0} {
  253.           XFSaveShowWindow $xfOutFile $xfProcName
  254.         }
  255.       }
  256.  
  257.       # save .
  258.       if {[XFMiscInModule .] == 0 &&
  259.           [XFMiscIsXFElement .] == 0} {
  260.         set xfMisc(menuBarTraversalList) ""
  261.         set xfMisc(specialSaveString) ""
  262.         puts $xfOutFile "\n\n# procedure to show window ."
  263.         puts $xfOutFile "proc ShowWindow. {args} {# xf ignore me 7"
  264.         if {"[info procs StartupSrc.]" != ""} {
  265.           puts $xfOutFile "\nStartupSrc."
  266.         }
  267.         XFSaveWidget $xfOutFile .
  268.         XFSaveBind $xfOutFile .
  269.         XFSaveWidgetSpecial $xfOutFile .
  270.         XFSaveSubwindow $xfOutFile .
  271.         if {"[info procs MiddleSrc.]" != ""} {
  272.           puts $xfOutFile "\nMiddleSrc."
  273.         }
  274.         XFSavePack $xfOutFile .
  275.         XFSavePlace $xfOutFile .
  276.         XFSaveMenubarTraversal $xfOutFile
  277.         if {"$xfMisc(specialSaveString)" != ""} {
  278.           puts $xfOutFile "\n$xfMisc(specialSaveString)\n"
  279.         }
  280.         if {"[info procs EndSrc.]" != ""} {
  281.           puts $xfOutFile "\nEndSrc."
  282.         }
  283.         puts $xfOutFile "\n  if {\"\[info procs XFEdit\]\" != \"\"} {"
  284.         puts $xfOutFile "    catch \"XFMiscBindWidgetTree .\""
  285.         puts $xfOutFile "    after 2 \"catch \{XFEditSetShowWindows\}\""
  286.         puts $xfOutFile "  }"
  287.         puts $xfOutFile "}"
  288.         XFSaveShowWindowTail $xfOutFile .
  289.       }
  290.  
  291.       # save procedures
  292.       puts $xfOutFile "\n\n# User defined procedures"
  293.       set xfTmpList ""
  294.       foreach xfProcName [set moduleList($xfConf(programName))] {
  295.         if {[XFMiscInModule $xfProcName] == 0 &&
  296.             [XFMiscIsXFElement $xfProcName] == 0 &&
  297.             "[info procs $xfProcName]" != ""} {
  298.           if {[XFMiscIsXFSpecialElement $xfProcName]} {
  299.             continue
  300.           }
  301.           XFSaveProc $xfOutFile $xfProcName
  302.           lappend xfTmpList "$xfProcName"
  303.         }
  304.       }
  305.       foreach xfProcName [lsort [info procs]] {
  306.         if {[XFMiscInModule $xfProcName] == 0 &&
  307.             [XFMiscIsXFElement $xfProcName] == 0 &&
  308.             [lsearch $xfTmpList $xfProcName] == -1} {
  309.           if {[XFMiscIsXFSpecialElement $xfProcName]} {
  310.             continue
  311.           }
  312.           XFSaveProc $xfOutFile $xfProcName
  313.         }
  314.       }
  315.       puts $xfOutFile "\n\n# Internal procedures"
  316.       set xfTmpList ""
  317.       foreach xfProcName [set moduleList($xfConf(programName))] {
  318.         if {[XFMiscInModule $xfProcName] == 0 &&
  319.             [XFMiscIsXFElement $xfProcName] == 0 &&
  320.             "[info procs $xfProcName]" != ""} {
  321.           if {[XFMiscIsXFSpecialElement $xfProcName]} {
  322.             XFSaveProc $xfOutFile $xfProcName
  323.             lappend xfTmpList "$xfProcName"
  324.           }
  325.         }
  326.       }
  327.       foreach xfProcName [lsort [info procs]] {
  328.         if {[XFMiscInModule $xfProcName] == 0 &&
  329.             [XFMiscIsXFElement $xfProcName] == 0 &&
  330.             [lsearch $xfTmpList $xfProcName] == -1} {
  331.           if {[XFMiscIsXFSpecialElement $xfProcName]} {
  332.             XFSaveProc $xfOutFile $xfProcName
  333.           }
  334.         }
  335.       }
  336.  
  337.       XFSaveSourceAppendix $xfOutFile
  338.       puts $xfOutFile "\n# eof"
  339.       puts $xfOutFile "#"
  340.       puts $xfOutFile ""
  341.       close $xfOutFile
  342.     }
  343.     catch "chmod u+x $xfFileName"
  344.   }
  345.   set xfStatus(saving) 0
  346. }
  347.  
  348. ##########
  349. # Procedure: XFSaveModuleList
  350. # Description: save current save module selection
  351. # Arguments: none
  352. # Returns: none
  353. # Sideeffects: none
  354. ##########
  355. proc XFSaveModuleList {} {
  356.   global xfSaveModuleList
  357.  
  358.   if {[catch "open .xf-save-modules w" xfOutFile]} {
  359.     XFProcError "$xfOutFile"
  360.   } {
  361.     puts $xfOutFile "global xfSaveModuleList"
  362.     puts $xfOutFile "set xfSaveModuleList {[set xfSaveModuleList]}"
  363.     puts $xfOutFile "\n# eof"
  364.     puts $xfOutFile "#"
  365.     puts $xfOutFile ""
  366.     close $xfOutFile
  367.   }
  368. }
  369.  
  370. ##########
  371. # Procedure: XFSaveAsProc
  372. # Description: save selected toplevel to procedure
  373. # Arguments: xfW
  374. # Returns: none
  375. # Sideeffects: none
  376. ##########
  377. proc XFSaveAsProc {xfW} {
  378.   global xfConf
  379.   global xfPath
  380.   global xfStatus
  381.  
  382.   if {$xfStatus(saving)} {
  383.     return
  384.   }
  385.   set xfStatus(saving) 1
  386.  
  387.   if {"[info commands $xfW]" != ""} {
  388.     if {[catch "open $xfPath(tmp)/tp$xfStatus(uniqueId) w" xfOutFile]} {
  389.       XFProcError "Could not create toplevel procedure\nI will not remove this toplevel\n$xfOutFile"
  390.     } {
  391.       XFSaveRootToplevelChild $xfOutFile $xfW
  392.       XFSaveSourceDestroyWindow $xfOutFile $xfW
  393.       close $xfOutFile
  394.  
  395.       if {[catch "source $xfPath(tmp)/tp$xfStatus(uniqueId)" xfResult]} {
  396.         XFProcError "Could not create toplevel procedure\nI will not remove this toplevel\n$xfResult"
  397.       } {
  398.         XFDestroy $xfW
  399.         update
  400.         catch "exec rm $xfPath(tmp)/tp$xfStatus(uniqueId)"
  401.       }
  402.     }
  403.   }
  404.   set xfStatus(saving) 0
  405. }
  406.  
  407. ##########
  408. # Procedure: XFSaveClassBindings
  409. # Description: save class bindings
  410. # Arguments: xfFileName - the output file name
  411. # Returns: none
  412. # Sideeffects: none
  413. ##########
  414. proc XFSaveClassBindings {xfFileName} {
  415.   global xfConf
  416.   global xfPath
  417.   global xfStatus
  418.  
  419.   if {$xfStatus(saving)} {
  420.     return
  421.   }
  422.   set xfStatus(saving) 1
  423.  
  424.   # save current file
  425.   if {[catch "open $xfFileName w" xfOutFile]} {
  426.     XFProcError "$xfOutFile"
  427.   } {
  428.     puts $xfOutFile "# class bindings"
  429.     puts $xfOutFile "#"
  430.     foreach xfCounter $xfStatus(elementList) {
  431.       XFSaveBind $xfOutFile $xfCounter 1
  432.     }
  433.     foreach xfCounter $xfStatus(additionalList) {
  434.       XFSaveBind $xfOutFile $xfCounter 1
  435.     }
  436.     puts $xfOutFile "\n# eof"
  437.     puts $xfOutFile "#"
  438.     puts $xfOutFile ""
  439.     close $xfOutFile
  440.   }
  441.   set xfStatus(saving) 0
  442. }
  443.  
  444. ##########
  445. # Procedure: XFSaveProcsTmplt
  446. # Description: save procedures in template file
  447. # Arguments: none
  448. # Returns: none
  449. # Sideeffects: none
  450. ##########
  451. proc XFSaveProcsTmplt {} {
  452.   global xfPath
  453.   global xfStatus
  454.  
  455.   if {[catch "open $xfPath(tmp)/tb$xfStatus(uniqueId) a" xfOutFile] != 0} {
  456.     XFProcError "$xfOutFile"
  457.   } {
  458.     puts $xfOutFile "# XFInternalString"
  459.     puts $xfOutFile "# Procedures"
  460.     foreach xfProcName $xfStatus(tmpltList) {
  461.       if {[catch "winfo class $xfProcName"]} {
  462.         XFSaveProc $xfOutFile $xfProcName
  463.       }
  464.     }
  465.     close $xfOutFile
  466.   }
  467. }
  468.  
  469. ##########
  470. # Procedure: XFSaveScript
  471. # Description: save a startup script
  472. # Arguments: xfProgramName - the prograqm name
  473. # Returns: none
  474. # Sideeffects: none
  475. ##########
  476. proc XFSaveScript {xfProgramName} {
  477.   global xfConf
  478.   global xfLoadPath
  479.  
  480.   if {![catch "open [file rootname $xfProgramName].sh w" outFile]} {
  481.     puts $outFile "#!/bin/sh"
  482.     puts $outFile "#"
  483.     puts $outFile "# Program: [file rootname $xfProgramName]"
  484.     puts $outFile "#"
  485.     puts $outFile "# This file is an automatically created shell script"
  486.     puts $outFile "# for starting the application named: $xfProgramName"
  487.     puts $outFile "#"
  488.     puts $outFile "# adapt the following variables to fit your"
  489.     puts $outFile "# local site"
  490.     puts $outFile "#"
  491.     puts $outFile "# WHIS_CMD is the wish interpreter to use"
  492.     puts $outFile "WISH_CMD=$xfConf(interpreter)"
  493.     puts $outFile "#"
  494.     puts $outFile "# XF_LOAD_PATH is the path were the tcl modules"
  495.     puts $outFile "# for this application are located"
  496.     puts $outFile "if test \"\$XF_LOAD_PATH\" = \"\"; then"
  497.     puts $outFile "  XF_LOAD_PATH=$xfLoadPath"
  498.     puts $outFile "else"
  499.     puts $outFile "  XF_LOAD_PATH=\$XF_LOAD_PATH:$xfLoadPath"
  500.     puts $outFile "fi"
  501.     puts $outFile "#"
  502.     puts $outFile "#"
  503.     puts $outFile "ARGC=\$#"
  504.     puts $outFile "COMMANDLINE="
  505.     puts $outFile "while \[ \$ARGC -gt 0 \]; do"
  506.     puts $outFile "  C=\$1"
  507.     puts $outFile "  shift"
  508.     puts $outFile "  ARGC=`expr \$ARGC - 1`"
  509.     puts $outFile "  case \$C in"
  510.     puts $outFile "    -xfloadpath)"
  511.     puts $outFile "      if \[ \$ARGC -gt 0 \]; then"
  512.     puts $outFile "        C=\$1"
  513.     puts $outFile "        shift"
  514.     puts $outFile "        ARGC=`expr \$ARGC - 1`"
  515.     puts $outFile "        XF_LOAD_PATH=\$C:\$XF_LOAD_PATH"
  516.     puts $outFile "      else"
  517.     puts $outFile "        echo \"$xfProgramName: expected path for -xfloadpath\""
  518.     puts $outFile "        exit 2"
  519.     puts $outFile "      fi;;"
  520.     puts $outFile "    *)"
  521.     puts $outFile "      COMMANDLINE=\$COMMANDLINE\" \"\$C;;"
  522.     puts $outFile "  esac"
  523.     puts $outFile "done"
  524.     puts $outFile "#"
  525.     puts $outFile "export XF_LOAD_PATH"
  526.     puts $outFile "for p in `echo \$XF_LOAD_PATH|awk 'BEGIN{RS=\":\"}"
  527.     puts $outFile "{print \$0}'`; do"
  528.     puts $outFile "  if test -f \$p/$xfProgramName; then "
  529.     puts $outFile "    exec \$WISH_CMD -name [file rootname $xfProgramName] -file \$p/$xfProgramName \$COMMANDLINE"
  530.     puts $outFile "  fi"
  531.     if {$xfConf(versionCommand)} {
  532.       puts $outFile "  (cd \$p; retrv -q $xfProgramName) 2>/dev/null"
  533.       puts $outFile "  if test -f \$p/$xfProgramName; then "
  534.       puts $outFile "    \$WISH_CMD -name [file rootname $xfProgramName] -file \$p/$xfProgramName \$COMMANDLINE"
  535.       puts $outFile "    (cd \$p; rm -f $xfProgramName) 2>/dev/null"
  536.       puts $outFile "  fi"
  537.     }
  538.     puts $outFile "done"
  539.     puts $outFile "echo \"Could not find: $xfProgramName\""
  540.     puts $outFile "# eof"
  541.     puts $outFile ""
  542.     close $outFile
  543.     catch "chmod u+x [file rootname $xfProgramName].sh"
  544.   } {
  545.     XFProcError "Could not open [file rootname $xfProgramName].sh"
  546.   }
  547. }
  548.  
  549. ##########
  550. # Procedure: XFSaveSubTree
  551. # Description: save the widget sub tree
  552. # Arguments: xfW - the widget
  553. #            xfFileName - the output file
  554. #            xfSaveAsProc - save with variable as pathname
  555. # Returns: none
  556. # Sideeffects: none
  557. ##########
  558. proc XFSaveSubTree {xfW xfFileName {xfSaveAsProc 0}} {
  559.   global symbolicName
  560.   global xfMisc
  561.   global xfAppDefToplevels
  562.  
  563.   if {"$xfW" == "."} {
  564.     XFProcError "Sorry, no cutting from ."
  565.     return
  566.   }
  567.   if {[catch "open $xfFileName w" xfOutFile]} {
  568.     XFProcError "$xfOutFile"
  569.   } {
  570.     set xfMisc(menuBarTraversalList) ""
  571.     set xfMisc(specialSaveString) ""
  572.     puts $xfOutFile "# $xfW"
  573.     puts $xfOutFile "# The above line makes pasting MUCH easier for me."
  574.     puts $xfOutFile "# It contains the pathname of the cutted widget."
  575.     XFSaveComment $xfOutFile template [file rootname [file tail $xfFileName]]
  576.     if {$xfSaveAsProc} {
  577.       puts $xfOutFile "\nproc V[winfo class $xfW]$xfW { insertWidgetPath args} {"
  578.       puts $xfOutFile "\n  set xfCounter 0"
  579.       puts $xfOutFile "  set xfLength \[llength \$args\]"
  580.       puts $xfOutFile "  while {\$xfCounter < \$xfLength} {"
  581.       puts $xfOutFile "    set xfElement \[lindex \$args \$xfCounter\]"
  582.       puts $xfOutFile "    if {\"\$xfElement\" == \"-startupSrc\" ||"
  583.       puts $xfOutFile "        \"\$xfElement\" == \"-middleSrc\" ||"
  584.       puts $xfOutFile "        \"\$xfElement\" == \"-endSrc\"} {"
  585.       puts $xfOutFile "      if {\$xfLength > \[expr \$xfCounter+1\]} {"
  586.       puts $xfOutFile "        incr xfCounter"
  587.       puts $xfOutFile "        set xfSource(\$xfElement) \[lindex \$args \$xfCounter\]"
  588.       puts $xfOutFile "      }"
  589.       puts $xfOutFile "    } {"
  590.       puts $xfOutFile "      if {\[string match -* \$xfElement\]} {"
  591.       puts $xfOutFile "        if {\$xfLength > \[expr \$xfCounter+1\]} {"
  592.       puts $xfOutFile "          incr xfCounter"
  593.       puts $xfOutFile "          set xfGenResource(\$xfElement) \[lindex \$args \$xfCounter\]"
  594.       puts $xfOutFile "        }"
  595.       puts $xfOutFile "      } {"
  596.       puts $xfOutFile "        if {\[string match .* \$xfElement\]} {"
  597.       puts $xfOutFile "          if {\$xfLength > \[expr \$xfCounter+2\]} {"
  598.       puts $xfOutFile "            incr xfCounter"
  599.       puts $xfOutFile "            set xfSpecResource(\$xfElement) \[lindex \$args \$xfCounter\]"
  600.       puts $xfOutFile "            incr xfCounter"
  601.       puts $xfOutFile "            lappend xfSpecResource(\$xfElement) \[lindex \$args \$xfCounter\]"
  602.       puts $xfOutFile "          }"
  603.       puts $xfOutFile "        }"
  604.       puts $xfOutFile "      }"
  605.       puts $xfOutFile "    }"
  606.       puts $xfOutFile "    incr xfCounter"
  607.       puts $xfOutFile "  }"
  608.       puts $xfOutFile "\n  if {\"\[info commands \$insertWidgetPath\]\" == \"\"} {"
  609.       puts $xfOutFile "  if {\[info exists xfSource(-startupSrc)\]} {"
  610.       puts $xfOutFile "    if {\[catch \"\$xfSource(-startupSrc) \$insertWidgetPath\" xfResult\]} {"
  611.       puts $xfOutFile "      puts stderr \$xfResult"
  612.       puts $xfOutFile "    }"
  613.       puts $xfOutFile "  }"
  614.       puts $xfOutFile "  set widgetCode {"
  615.       # make interpreter happy }}}
  616.     }
  617.     XFSaveWidget $xfOutFile $xfW
  618.     XFSaveBind $xfOutFile $xfW
  619.     XFSaveWidgetSpecial $xfOutFile $xfW
  620.     XFSaveSubwindow $xfOutFile $xfW
  621.     if {$xfSaveAsProc} {
  622.       # make interpreter happy {
  623.       puts $xfOutFile "  }"
  624.       puts $xfOutFile "  set subst \"\""
  625.       puts $xfOutFile "  append subst \\\\ \[string trim \{ $xfW \}\]"
  626.       puts $xfOutFile "  regsub -all \$subst \$widgetCode \$insertWidgetPath widgetCode"
  627.       puts $xfOutFile "  regsub -all {%ThisTopWidget} \$widgetCode \$insertWidgetPath widgetCode"
  628.       puts $xfOutFile "  eval \$widgetCode"
  629.       puts $xfOutFile "\n  if {\[info exists xfSource(-middleSrc)\]} {"
  630.       puts $xfOutFile "    if {\[catch \"\$xfSource(-middleSrc) \$insertWidgetPath\" xfResult\]} {"
  631.       puts $xfOutFile "      puts stderr \$xfResult"
  632.       puts $xfOutFile "    }"
  633.       puts $xfOutFile "  }"
  634.       puts $xfOutFile "  set geometryCode {"
  635.       # make interpreter happy }
  636.     }
  637.     XFSavePack $xfOutFile $xfW
  638.     XFSavePlace $xfOutFile $xfW
  639.     set xfParent [string range $xfW 0 [expr [string last . $xfW]-1]]
  640.     if {"$xfParent" == ""} {
  641.       set xfParent .
  642.     }
  643.     XFSavePackOne $xfOutFile $xfParent $xfW $xfSaveAsProc
  644.     XFSavePlaceOne $xfOutFile $xfParent $xfW $xfSaveAsProc
  645.     XFSaveMenubarTraversal $xfOutFile
  646.     if {[lsearch $xfAppDefToplevels $xfW] != -1} {
  647.       puts $xfOutFile "  if {\"\[info procs XFLocalSetAppDefs\]\" != \"\"} {"
  648.       puts $xfOutFile "    XFLocalSetAppDefs"
  649.       puts $xfOutFile "  }"
  650.     }
  651.     if {"$xfMisc(specialSaveString)" != ""} {
  652.       puts $xfOutFile "\n$xfMisc(specialSaveString)\n"
  653.     }
  654.     if {$xfSaveAsProc} {
  655.       # make interpreter happy {{
  656.       puts $xfOutFile "  }"
  657.       puts $xfOutFile "  set subst \"\""
  658.       puts $xfOutFile "  append subst \\\\ \[string trim \{ $xfW \}\]"
  659.       puts $xfOutFile "  regsub -all \$subst \$geometryCode \$insertWidgetPath geometryCode"
  660.       puts $xfOutFile "  regsub -all {\\\$insertWidgetPath} \$geometryCode \[winfo parent \$insertWidgetPath\] geometryCode"
  661.       puts $xfOutFile "  eval \$geometryCode"
  662.       puts $xfOutFile "\n  if {\[info exists xfSource(-endSrc)\]} {"
  663.       puts $xfOutFile "    if {\[catch \"\$xfSource(-endSrc) \$insertWidgetPath\" xfResult\]} {"
  664.       puts $xfOutFile "      puts stderr \$xfResult"
  665.       puts $xfOutFile "    }"
  666.       puts $xfOutFile "  }"
  667.       puts $xfOutFile "  }"
  668.       puts $xfOutFile "\n  if {\[info exists xfGenResource\]} {"
  669.       puts $xfOutFile "    set xfWidgetList \"\""
  670.       puts $xfOutFile "    set xfTmpWidgetList \$insertWidgetPath"
  671.       puts $xfOutFile "    while {1} {"
  672.       puts $xfOutFile "      if {\[llength \$xfTmpWidgetList\] == 0} {"
  673.       puts $xfOutFile "        break"
  674.       puts $xfOutFile "      }"
  675.       puts $xfOutFile "      set xfFirstWidget \[lindex \$xfTmpWidgetList 0\]"
  676.       puts $xfOutFile "      lappend xfWidgetList \$xfFirstWidget"
  677.       puts $xfOutFile "      set xfTmpWidgetList \[lreplace \$xfTmpWidgetList 0 0\]"
  678.       puts $xfOutFile "      if {\"\[winfo children \$xfFirstWidget\]\" != \"\"} {"
  679.       puts $xfOutFile "        eval lappend xfTmpWidgetList \[winfo children \$xfFirstWidget\]"
  680.       puts $xfOutFile "      }"
  681.       puts $xfOutFile "    }"
  682.       puts $xfOutFile "    foreach xfCounter \$xfWidgetList {"
  683.       puts $xfOutFile "      if {\[info exists xfGenResource\]} {"
  684.       puts $xfOutFile "        foreach xfResource \[array names xfGenResource\] {"
  685.       puts $xfOutFile "          catch \"\$xfCounter config \$xfResource \[set xfGenResource(\$xfResource)\]\""
  686.       puts $xfOutFile "        }"
  687.       puts $xfOutFile "      }"
  688.       puts $xfOutFile "    }"
  689.       puts $xfOutFile "  }"
  690.       puts $xfOutFile "  if {\[info exists xfSpecResource\]} {"
  691.       puts $xfOutFile "    foreach xfCounter \[array names xfSpecResource\] {"
  692.       puts $xfOutFile "      if {\"\[info commands \$xfCounter\]\" != \"\"} {"
  693.       puts $xfOutFile "        catch \"\$xfCounter config \[lindex \$xfSpecResource(\$xfCounter) 0\] \[lindex \$xfSpecResource(\$xfCounter) 1\]\""
  694.       puts $xfOutFile "      }"
  695.       puts $xfOutFile "    }"
  696.       puts $xfOutFile "  }"
  697.       puts $xfOutFile "\n  if {\"\[info procs XFEdit\]\" != \"\"} {"
  698.       puts $xfOutFile "    catch \"XFMiscBindWidgetTree \$insertWidgetPath\""
  699.       puts $xfOutFile "    after 2 \"catch \{XFEditSetShowWindows\}\""
  700.       puts $xfOutFile "  }"
  701.       puts $xfOutFile "  return \$insertWidgetPath"
  702.       # make interpreter happy {
  703.       puts $xfOutFile "}"
  704.     }
  705.     puts $xfOutFile "# end of widget tree\n"
  706.     close $xfOutFile
  707.   }
  708. }
  709.  
  710. ##########
  711. # Procedure: XFSaveTclIndex
  712. # Description: save the tclIndex file
  713. # Arguments: xfOutFile - the output descriptor
  714. #            xfParent - the parent widget
  715. # Returns: none
  716. # Sideeffects: none
  717. ##########
  718. proc XFSaveTclIndex {} {
  719.   global autoLoadList
  720.   global moduleList
  721.   global xfConf
  722.  
  723.   set xfTclIndex ""
  724.   foreach xfCounter [array names moduleList] {
  725.     if {"$xfCounter" == "$xfConf(programName)"} {
  726.       continue
  727.     }
  728.     if {"$moduleList($xfCounter)" != ""} {
  729.       append xfTclIndex "# $xfCounter\n"
  730.     }
  731.     foreach xfElement $moduleList($xfCounter) {
  732.       if {[catch "winfo class $xfElement"]} {
  733.         if {$xfConf(writeNewTclIndex)} {
  734.           if {"[info procs ShowWindow$xfElement]" != ""} {
  735.         append xfTclIndex "set [list auto_index(ShowWindow$xfElement)]"
  736.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  737.           } {
  738.         append xfTclIndex "set [list auto_index($xfElement)]"
  739.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  740.           }
  741.           if {"[info procs DestroyWindow$xfElement]" != ""} {
  742.         append xfTclIndex "set [list auto_index(DestroyWindow$xfElement)]"
  743.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  744.           } {
  745.         append xfTclIndex "set [list auto_index($xfElement)]"
  746.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  747.           }
  748.         } {
  749.           if {"[info procs ShowWindow$xfElement]" != ""} {
  750.             append xfTclIndex "ShowWindow$xfElement $xfCounter\n"
  751.           } {
  752.             append xfTclIndex "$xfElement $xfCounter\n"
  753.           }
  754.           if {"[info procs DestroyWindow$xfElement]" != ""} {
  755.             append xfTclIndex "DestroyWindow$xfElement $xfCounter\n"
  756.           } {
  757.             append xfTclIndex "$xfElement $xfCounter\n"
  758.           }
  759.         }
  760.       } {
  761.         if {$xfConf(writeNewTclIndex)} {
  762.           if {"[info procs ShowWindow$xfElement]" != ""} {
  763.         append xfTclIndex "set [list auto_index(ShowWindow$xfElement)]"
  764.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  765.           }
  766.           if {"[info procs DestroyWindow$xfElement]" != ""} {
  767.         append xfTclIndex "set [list auto_index(DestroyWindow$xfElement)]"
  768.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  769.           }
  770.           if {"[info procs StartupSrc$xfElement]" != ""} {
  771.         append xfTclIndex "set [list auto_index(StartupSrc$xfElement)]"
  772.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  773.           }
  774.           if {"[info procs MiddleSrc$xfElement]" != ""} {
  775.         append xfTclIndex "set [list auto_index(MiddleSrc$xfElement)]"
  776.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  777.           }
  778.           if {"[info procs EndSrc$xfElement]" != ""} {
  779.         append xfTclIndex "set [list auto_index(EndSrc$xfElement)]"
  780.         append xfTclIndex " \"source \$dir/$xfCounter\"\n"
  781.           }
  782.         } {
  783.           if {"[info procs ShowWindow$xfElement]" != ""} {
  784.             append xfTclIndex "ShowWindow$xfElement $xfCounter\n"
  785.           }
  786.           if {"[info procs DestroyWindow$xfElement]" != ""} {
  787.             append xfTclIndex "DestroyWindow$xfElement $xfCounter\n"
  788.           }
  789.           if {"[info procs StartupSrc$xfElement]" != ""} {
  790.             append xfTclIndex "StartupSrc$xfElement $xfCounter\n"
  791.           }
  792.           if {"[info procs MiddleSrc$xfElement]" != ""} {
  793.             append xfTclIndex "MiddleSrc$xfElement $xfCounter\n"
  794.           }
  795.           if {"[info procs EndSrc$xfElement]" != ""} {
  796.             append xfTclIndex "EndSrc$xfElement $xfCounter\n"
  797.           }
  798.         }
  799.       }
  800.     }
  801.     if {"$moduleList($xfCounter)" != ""} {
  802.       append xfTclIndex "\n"
  803.     }
  804.   }
  805.  
  806.   if {"$xfTclIndex" != ""} {
  807.     if {[catch "open tclIndex w" xfOutFile]} {
  808.       XFProcError "$xfOutFile"
  809.     } {
  810.       if {$xfConf(writeNewTclIndex)} {
  811.         puts $xfOutFile "# Tcl autoload index file, version 2.0"
  812.         puts $xfOutFile "# This file is generated by the \"auto_mkindex\" command"
  813.         puts $xfOutFile "# and sourced to set up indexing information for one or"
  814.         puts $xfOutFile "# more commands.  Typically each line is a command that"
  815.         puts $xfOutFile "# sets an element in the auto_index array, where the"
  816.         puts $xfOutFile "# element name is the name of a command and the value is"
  817.         puts $xfOutFile "# a script that loads the command.\n"
  818.       } {
  819.         puts $xfOutFile "# Tcl autoload index file: each line identifies a Tcl"
  820.         puts $xfOutFile "# procedure and the file where that procedure is"
  821.         puts $xfOutFile "# defined.  Generated by the \"auto_mkindex\" command.\n"
  822.       }
  823.       puts $xfOutFile "$xfTclIndex"
  824.       puts $xfOutFile "# end of tclIndex"
  825.       puts $xfOutFile ""
  826.       close $xfOutFile
  827.     }
  828.   }
  829. }
  830.  
  831. # eof
  832.  
  833.